agentmux_srv\backend\wcore/
event.rs

1#![allow(dead_code)]
2// Copyright 2025-2026, AgentMux Corp.
3// SPDX-License-Identifier: Apache-2.0
4
5//! Pub/sub event publishing for WaveObj updates.
6
7use crate::backend::oref::ORef;
8use crate::backend::storage::wstore::WaveStore;
9use crate::backend::obj::*;
10use crate::backend::wps::{self, Broker, WaveEvent};
11
12/// Publish a WaveObj update event through the broker.
13pub fn send_wave_obj_update(broker: &Broker, store: &WaveStore, oref: &ORef) {
14    let obj_json = match oref.otype.as_str() {
15        OTYPE_CLIENT => store
16            .get::<Client>(&oref.oid)
17            .ok()
18            .flatten()
19            .and_then(|o| serde_json::to_value(&o).ok()),
20        OTYPE_WINDOW => store
21            .get::<Window>(&oref.oid)
22            .ok()
23            .flatten()
24            .and_then(|o| serde_json::to_value(&o).ok()),
25        OTYPE_WORKSPACE => store
26            .get::<Workspace>(&oref.oid)
27            .ok()
28            .flatten()
29            .and_then(|o| serde_json::to_value(&o).ok()),
30        OTYPE_TAB => store
31            .get::<Tab>(&oref.oid)
32            .ok()
33            .flatten()
34            .and_then(|o| serde_json::to_value(&o).ok()),
35        OTYPE_LAYOUT => store
36            .get::<LayoutState>(&oref.oid)
37            .ok()
38            .flatten()
39            .and_then(|o| serde_json::to_value(&o).ok()),
40        OTYPE_BLOCK => store
41            .get::<Block>(&oref.oid)
42            .ok()
43            .flatten()
44            .and_then(|o| serde_json::to_value(&o).ok()),
45        _ => None,
46    };
47
48    if let Some(obj) = obj_json {
49        broker.publish(WaveEvent {
50            event: wps::EVENT_WAVE_OBJ_UPDATE.to_string(),
51            scopes: vec![oref.to_string()],
52            sender: String::new(),
53            persist: 0,
54            data: Some(serde_json::json!({
55                "updatetype": UPDATE_TYPE_UPDATE,
56                "otype": oref.otype,
57                "oid": oref.oid,
58                "obj": obj,
59            })),
60        });
61    }
62}